#pragma once
#include "Vector2.h"
#include "Matrix4.h"

namespace Rz { namespace Graphics { namespace Math {

class Projection :
	public Object
{
	public:
		RZ_RTTI(Rz::Graphics::Math, Projection);
		RZ_RTTI_IMPLEMENTS(Object);
		RZ_RTTI_TEMPLATES();
		RZ_RTTI_END;

		static Projection CreatePerspectiveFieldOfView(f32 fieldOfView, f32 aspectRatio, f32 nearPlane, f32 farPlane);
		static Projection CreateOrthographic(f32 width, f32 height, f32 nearPlane, f32 farPlane);

		const Matrix4& GetMatrix() const;
		Matrix4& GetMatrix();
		void SetMatrix(const Matrix4& matrix);

		const Vector2& GetNearFar() const;
		Vector2& GetNearFar();
		void SetNearFar(const Vector2& nearFar);

	private:
		Matrix4 _matrix;
		Vector2 _nearFar;
};

} } }
